package com.redepronik.negosys.rrhh.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.validator.constraints.Length;

import com.redepronik.negosys.invfac.entity.Egreso;
import com.redepronik.negosys.invfac.entity.Garante;
import com.redepronik.negosys.invfac.entity.Guiaremision;

/**
 * The persistent class for the cliente database table.
 * 
 */
@Entity
@Table(schema = "rrhh", name = "cliente")
@NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c")
public class Cliente implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(allocationSize = 1, name = "CLIENTE_CLIENTEID_GENERATOR", sequenceName = "RRHH.CLIENTE_CLIENTEID_SEQ")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CLIENTE_CLIENTEID_GENERATOR")
	@Column(unique = true, nullable = false)
	private Integer clienteid;

	@Column(nullable = false)
	private Boolean activo;

	@Column(length = 10)
	private String folio;

	@Length(min = 3, max = 150, message = "EL CAMPO NOMBRE COMERCIAL ACEPTA DE 3 A 150 LETRAS")
	@Column(nullable = false, length = 150)
	private String nombrecomercial;

	// bi-directional many-to-one association to Persona
	@OneToOne
	@JoinColumn(name = "personaid", nullable = false)
	private Persona persona;

	// bi-directional many-to-one association to Tipocliente
	@ManyToOne
	@JoinColumn(name = "tipoclienteid", nullable = false)
	private Tipocliente tipocliente;

	// bi-directional many-to-one association to Egreso
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "cliente")
	private List<Egreso> egresos;

	// bi-directional many-to-one association to Egreso
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "cliente")
	private List<Guiaremision> guiaRemisiones;

	// bi-directional many-to-one association to Egreso
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "cliente")
	private List<Garante> garantes;

	public Cliente() {
	}

	public Egreso addEgreso(Egreso egreso) {
		getEgresos().add(egreso);
		egreso.setCliente(this);

		return egreso;
	}

	public Guiaremision addEgreso(Guiaremision guiaRemisiones) {
		getGuiaRemisiones().add(guiaRemisiones);
		guiaRemisiones.setCliente(this);

		return guiaRemisiones;
	}

	public Garante addGarante(Garante garante) {
		getGarantes().add(garante);
		garante.setCliente(this);

		return garante;
	}

	public Boolean getActivo() {
		return this.activo;
	}

	public Integer getClienteid() {
		return this.clienteid;
	}

	public List<Egreso> getEgresos() {
		return egresos;
	}

	public String getFolio() {
		return this.folio;
	}

	public List<Garante> getGarantes() {
		return garantes;
	}

	public List<Guiaremision> getGuiaRemisiones() {
		return guiaRemisiones;
	}

	public String getNombrecomercial() {
		return this.nombrecomercial;
	}

	public Persona getPersona() {
		return this.persona;
	}

	public Tipocliente getTipocliente() {
		return this.tipocliente;
	}

	public Egreso removeEgreso(Egreso egreso) {
		getEgresos().remove(egreso);
		egreso.setCliente(null);

		return egreso;
	}

	public Guiaremision removeEgreso(Guiaremision guiaRemisiones) {
		getGuiaRemisiones().remove(guiaRemisiones);
		guiaRemisiones.setCliente(null);

		return guiaRemisiones;
	}

	public Garante removeGarante(Garante garante) {
		getGarantes().remove(garante);
		garante.setCliente(null);

		return garante;
	}

	public void setActivo(Boolean activo) {
		this.activo = activo;
	}

	public void setClienteid(Integer clienteid) {
		this.clienteid = clienteid;
	}

	public void setEgresos(List<Egreso> egresos) {
		this.egresos = egresos;
	}

	public void setFolio(String folio) {
		this.folio = folio;
	}

	public void setGarantes(List<Garante> garantes) {
		this.garantes = garantes;
	}

	public void setGuiaRemisiones(List<Guiaremision> guiaRemisiones) {
		this.guiaRemisiones = guiaRemisiones;
	}

	public void setNombrecomercial(String nombrecomercial) {
		this.nombrecomercial = nombrecomercial;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	public void setTipocliente(Tipocliente tipocliente) {
		this.tipocliente = tipocliente;
	}

}